package rhplus.utilizador;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import rhplus.acessoBD.PMF;

@PersistenceCapable
public class TratamentoPassado implements Serializable{

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id_tratamento_passado;
    @Persistent
    private Long id_pessoa;
    @Persistent
    private Date data;
    @Persistent
    private String descricao;
    @Persistent
    private String observacao;

    /** Creates a new instance of TratamentoPassado */
    public TratamentoPassado(final Long id_pessoa, final Date data, final String descricao, final String observacao) {

        this.id_pessoa = id_pessoa;
        this.data = data;
        this.descricao = descricao;
        this.observacao = observacao;
    }

    public Long getIdTratamentoPassado() {
        return id_tratamento_passado;
    }

    public Long getIdPessoa() {
        return id_pessoa;
    }

    public Date getData() {
        return data;
    }

    public void setData(final Date data) {
        this.data = data;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(final String descricao) {
        this.descricao = descricao;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(final String observacao) {
        this.observacao = observacao;
    }

    public static LinkedList<TratamentoPassado> devolvePorIdPessoa(final Long id_pessoa) throws Exception {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + TratamentoPassado.class.getName()
                + " where id_pessoa == " + id_pessoa;

        List<TratamentoPassado> tratamnts = (List<TratamentoPassado>) pm.newQuery(query).execute();

        LinkedList<TratamentoPassado> lista = new LinkedList<TratamentoPassado>();

        for (TratamentoPassado t : tratamnts) {
            lista.add(t);
        }

        return lista;
    }

    public static List<TratamentoPassado> devolveTodos() throws SQLException, ClassNotFoundException, InstantiationException,
            IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select * from " + TratamentoPassado.class.getName();

        List<TratamentoPassado> lista_de_tratamentos_passados = (List<TratamentoPassado>) pm.newQuery(query).execute();

        return lista_de_tratamentos_passados;
    }

    public static TratamentoPassado devolvePorIdTratamento(Long id_tratamento_passado) {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + TratamentoPassado.class.getName()
                + " where id_tratamento_passado== " + id_tratamento_passado;

        List<TratamentoPassado> pessoa_tratamentos_passados = (List<TratamentoPassado>) pm.newQuery(query).execute();

        return pessoa_tratamentos_passados.get(0);
    }

    public static void insere(TratamentoPassado dados_do_tratamento_passado){

        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.makePersistent(dados_do_tratamento_passado);
        } finally {
            pm.close();
        }

    }

    public static void altera(TratamentoPassado dados_do_tratamento_passado) throws Exception {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        Date data_nova = dados_do_tratamento_passado.getData();
        String descricao_nova = dados_do_tratamento_passado.getDescricao();
        String observacao_nova = dados_do_tratamento_passado.getObservacao();

        try {
            pm.currentTransaction().begin();

            dados_do_tratamento_passado = pm.getObjectById(TratamentoPassado.class, dados_do_tratamento_passado.getIdTratamentoPassado());
            //dados_do_tratamento_passado.setData(data_nova);
            dados_do_tratamento_passado.setDescricao(descricao_nova);
            dados_do_tratamento_passado.setObservacao(observacao_nova);

            pm.makePersistent(dados_do_tratamento_passado);
            pm.currentTransaction().commit();

        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }

    public static void remove(final Long id_tratamento_passado) throws SQLException, ClassNotFoundException,
            InstantiationException, IllegalAccessException {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            pm.currentTransaction().begin();

            TratamentoPassado tratamento_passado = pm.getObjectById(TratamentoPassado.class, id_tratamento_passado);
            pm.deletePersistent(tratamento_passado);

            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }

    public boolean equals(final Long id_tratamento_passado, final Long id_pessoa) {
        return this.getIdTratamentoPassado() == id_tratamento_passado && this.getIdTratamentoPassado() == id_pessoa;
    }

    public String toString() {
        return id_tratamento_passado + ";" + id_pessoa + ";" + data + ";" + descricao + ";" + observacao + ";";
    }

    public void setId(Long id_tra) {
        this.id_tratamento_passado = id_tra;
    }
}
